/*******************************************************************************
  * 文件：NetComm_Device.h
  * 作者：zyz
  * 版本：v1.0.0
  * 日期：2017-08-03
  * 说明：设备相关
*******************************************************************************/
#ifndef __NETCOMM_DEVICE_H
#define __NETCOMM_DEVICE_H
/* 头文件 --------------------------------------------------------------------*/
#include "NetComm_Typedefine.h"
#include "Macro.h"

/* 宏定义 --------------------------------------------------------------------*/
/* 类型定义 ------------------------------------------------------------------*/
// 报警状态，占用两个字节
typedef struct 
{
    // Byte 0
    U8 u8Byte1Reserve          : 8;    // 保留
    // Byte 1
    U8 u8FireOff               : 1;    // bit0:意外熄火
    U8 u8DryBurn               : 1;    // bit1:干烧
    U8 u8RDO                   : 1;    // bit2:热电偶
    U8 u8Sensor                : 1;    // bit3:干烧传感器
    U8 u8Comm                  : 1;    // bit4:通讯
    U8 u8DCF                   : 1;    // bit5:电磁阀
    U8 u8Gas                   : 1;    // bit6:燃气泄漏
    U8 u8Byte2Reserve          : 1;    // 保留
} NetCommAlarmStatus_ts;// 设备报警位域

typedef union
{
    U8                    u8AlarmStatus[2];
    NetCommAlarmStatus_ts sAlarmStatus;
}NetCommAlarmStatus_tu;// 设备报警联合体

// 设备状态
typedef struct 
{
    //Byte 1
    U8  u2Byte1Res1        : 3;    //保留
    U8  u1RightFire        : 1;    //右灶火状态
    U8  u1MidFire          : 1;    //中灶火状态
    U8  u1LeftFire         : 1;    //左灶火状态
    U8  u1Byte1Res2        : 1;    //保留
	U8  u1DevPower		   : 1;	   //设备电源状态
    //Byet 2 
    U8  u8Byte2            : 8;    //保留
    //Byte 3 
    U8  u8Byte3            : 8;    //保留
    //Byet 4
    U8  u8Byte4            : 8;    //保留
    //Byte 5 
    U8  u8Byte5            : 8;    //保留
    //Byet 6  
    U8  u8Byte6            : 8;    //保留
    //Byte 7
    U8  u8Byte7            : 8;    //保留
    //Byte8
    U8  u8Byte8            : 8;    //保留
    //Byte9
    U8  u8Byte9            : 8;    //保留
    //Byte10
    U8  u8LeftTimingTime   : 8;    //左灶定时时间
    //Byte11
    U8  u8MidTimingTime    : 8;    //中灶定时时间    
    //Byte12
    U8  u8RightTimingTime  : 8;    //右灶定时时间
    //Byte13
    U8  u8Byte13           : 8;    //保留
    //Byte14
    U8  u8Byte14           : 8;    //保留
    //Byte15
    U8  u8Byte15           : 8;    //保留
    //Byte16
    U8  u8Byte16           : 8;    //保留
    //Byte17
    U8  u8Byte17           : 8;    //保留
    //Byte18
    U8  u8Byte18           : 8;    //保留
    //Byte19
    U8  u8Byte19           : 8;    //保留
    //Byte20
    U8  u8Byte20           : 8;    //保留
    //Byte21
    U8  u8Byte21           : 8;    //保留
    //Byte22
    U8  u8Byte22           : 8;    //保留
    //Byte23
    U8  u8Byte23           : 8;    //保留
    //Byte24
    U8  u8Byte24           : 8;    //保留
    //Byte25
    U8  u8Byte25           : 8;    //保留
    //Byte26
    U8  u8Byte26           : 8;    //保留
    //Byte27
    U8  u8Byte27           : 8;    //保留
    //Byte28
    U8  u8Byte28           : 8;    //保留
    //Byte29
    U8  u8Byte29           : 8;    //保留
    //Byte30
    U8  u8Byte30           : 8;    //保留
    //Byte31
    U8  u8Byte31           : 8;    //保留  
    //Byte32
    U8  u8Byte32           : 8;    //保留
    //Byte33
    U8  u8Byte33           : 8;    //保留
    //Byte34
    U8  u8Byte34           : 8;    //保留
    //Byte35
    U8  u8Byte35           : 8;    //保留
    //Byte36
    U8  u8Byte36           : 8;    //保留
    //Byte37
    U8  u8SoftVer          : 8;    //软件版本
    //Byte38
    U8  u8Byte38           : 8;    //保留
    //Byte39
    U8  u8Byte39           : 8;    //保留
    //Byte40
    U8  u8Byte40           : 8;    //保留
    //Byte41
    U8  u2LeftTimingState  : 2;    // 左灶定时状态 0关，1进行中，2定时完成
    U8  u2RightTimingState : 2;    // 右灶定时状态 0关，1进行中，2定时完成
    U8  u2MidTimingState   : 2;    // 中灶定时状态 0关，1进行中，2定时完成
    U8  u2Byte41Res        : 2;    // 预留
    //Byte42
    U8  u1LeftKnobStatus   : 1;    //左灶旋钮开关状态
    U8  u1MidKnobStatus    : 1;    //中灶旋钮开关状态
    U8  u1RightKnobStatus  : 1;    //右灶旋钮开关状态
    U8  u5Byte42           : 5;    //保留
    //Byte43
    U8  u8Byte43           : 8;    //保留
    //Byte44
    U8  u8Byte44           : 8;    //保留
    //Byte45
    U8  u8Byte45           : 8;    //保留
    //Byte46
    U8  u8Byte46           : 8;    //保留
    //Byte47
    U8  u8Byte47           : 8;    //保留
    //Byte48
    U8  u8Byte48           : 8;    //保留
}NetCommDevStatus_ts;//设备状态位域

typedef union
{
    U8                   u8DevStatus[48];
    NetCommDevStatus_ts  sDevStatus;
}NetCommDevStatus_tu;// 设备状态联合体

typedef struct
{
    U16         u16SetType;
    const char *pcDescribe;
    int        (*fun)(U16 u16SetData);
}NetCommDevSetHandler_ts;
    
/* 变量定义 ------------------------------------------------------------------*/
/* 函数声明 ------------------------------------------------------------------*/
int NetComm_SetDevStatus(U16 u16SetType, U16 u16SetData);      // 设置设备状态
void NetComm_UpdataStatusData(void);                           // 更新状态数据
void NetComm_UpdataAlarmStatusData(void);				       // 更新报警数据
Bool NetComm_CheckAlarmStatus(void);                           // 检查报警状态
Bool NetComm_IsDevError(void);                                 // 检查设备是否故障
U8 NetComm_GetAlarmStatus(U8* pu8Data);                        // 获取报警状态
Bool NetComm_CheckDevStatus(void);                             // 检查设备状态
U8 NetComm_GetDevStatus(U8* pu8Data);                          // 获取设备状态

#endif    /*** #ifndef __NETCOMM_DEVICE_H ***/
